package com.example.lin.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 * @author Administrator
 */
public class RegexUtil {
    /**
     * 私有构造函数，防止实例化
     */
    private RegexUtil() {}

    /**
     * 验证手机号
     *
     * @param phoneNumber 手机号
     * @return 如果手机号合法，则返回 true；否则返回 false
     */
    public static boolean validPhone(String phoneNumber) {
        if (phoneNumber == null) {
            return false;
        }
        String regex = "^1[3-9]\\d{9}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(phoneNumber);
        return matcher.matches();
    }

    /**
     * 验证邮箱
     *
     * @param email 邮箱地址
     * @return 如果邮箱合法，则返回 true；否则返回 false
     */
    public static boolean validEmail(String email) {
        if (email == null) {
            return false;
        }
        String regex = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    /**
     * 验证身份证号
     *
     * @param idCard 身份证号
     * @return 如果身份证号合法，则返回 true；否则返回 false
     */
    public static boolean validIdCard(String idCard) {
        if (idCard == null) {
            return false;
        }
        String regex = "^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(idCard);
        return matcher.matches();
    }

    /**
     * 验证银行卡号
     *
     * @param bankCard 银行卡号
     * @return 如果银行卡号合法，则返回 true；否则返回 false
     */
    public static boolean validBankCard(String bankCard) {
        if (bankCard == null) {
            return false;
        }
        String regex = "^\\d{16,19}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(bankCard);
        return matcher.matches();
    }

    /**
     * 验证账号
     *
     * @param account 账号
     * @return 如果账号合法，则返回 true；否则返回 false
     */
    public static boolean validAccount(String account) {
        if (account == null) {
            return false;
        }
        // 假设账号只能包含字母、数字和下划线，长度在6到20之间
        String regex = "^[a-zA-Z0-9_]{6,20}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(account);
        return matcher.matches();
    }

    /**
     * 验证密码
     *
     * @param password 密码
     * @return 如果密码合法，则返回 true；否则返回 false
     */
    public static boolean validPassword(String password) {
        if (password == null) {
            return false;
        }
        // 假设密码必须包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符，长度在8到20之间
        String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,20}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(password);
        return matcher.matches();
    }
}
